﻿
/*************************************************************
Base Common Ajax Js.
Create By Ming.ma
2014-08-06 V1.0
*************************************************************/
Namespace.register("$ajax");

$ajax = {
    ajax: function (opt) {
        var xhr = this.createXhrObject();
        opt.async = opt.async != false ? true : false;
        if (opt.async == true)
            xhr.onreadystatechange = function () {
                if (xhr.readyState != 4) return;
                (xhr.status === 200 ?
                    opt.success(xhr.responseText, xhr.responseXML) :
                    opt.error(xhr.responseText, xhr.status));
            }
        xhr.open(opt.type, opt.url, opt.async);
        if (opt.type !== 'post')
            opt.data = null;
        else
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        opt.data = this.parseQuery(opt.data);
        xhr.send(opt.data);
        if (opt.async == false)
            return { "status": 200, "responseText": xhr.responseText };
    },
    post: function (url, success, data) {
        var popt = {
            url: url,
            type: 'post',
            data: data,
            async: true,
            success: success,
            error: function () { }
        }
        this.ajax(popt);
    },
    get: function (url, success) {
        var gopt = {
            url: url,
            type: 'get',
            async: true,
            success: success,
            error: function () { }
        }
        this.ajax(gopt);
    },
    createXhrObject: function () {
        var methods = [
            function () { return new XMLHttpRequest(); },
            function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
            function () { return new ActiveXObject('Microsoft.XMLHTTP'); }
        ];
        for (var i = 0; len = methods.length, i < len; i++) {
            try {
                methods[i]();
            } catch (e) {
                continue;
            }
            this.createXhrObject = methods[i];
            return methods[i]();
        }
        throw new Error('Could not create an XHR object.');
    },
    parseQuery: function (json) {
        if (typeof json == 'object') {
            var str = '';
            for (var i in json) {
                str += "&" + i + "=" + encodeURIComponent(json[i]);
            }
            return str.length == 0 ? str : str.substring(1);
        } else {
            return json;
        }
    }
};
